iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0

Python 的異步編程

asyncio模組介紹

asyncio 是 Python 標準庫中提供的異步編程框架,用於處理異步操作和並發任務。它在 Python 3.3 中引入。asyncio 提供了一個事件循環(event loop)來管理和調度協程(coroutines),從而實現非阻塞的程式設計。

主要概念

協程(Coroutines):
協程是用 async def 定義的函數,返回一個協程對象。
使用 await 關鍵字來等待協程完成某個操作,並允許事件循環在等待期間處理其他任務。

import asyncio

async def say_hello():
    print('Hello')
    await asyncio.sleep(1)  # 等待 1 秒
    print('World')

asyncio.run(say_hello())

HelloWorld之間會等待一秒
https://ithelp.ithome.com.tw/upload/images/20241006/20168338nYCknIJ5sw.png

事件循環(Event Loop):

事件循環是 asyncio 的核心,它負責管理和調度協程和任務。
使用 asyncio.run() 來運行協程,會自動創建一個事件循環,執行協程,並在完成後關閉循環。

async def main():
    print('Start')
    await asyncio.sleep(2)
    print('End')

asyncio.run(main())

這個範例使用 main() 作為主協程。在異步程式設計中,通常會有一個主要的協程來組織和調度其他協程。
StartEnd之間會等待兩秒
https://ithelp.ithome.com.tw/upload/images/20241006/20168338mPfNZw4PzN.png

say_hello() 和 main() 兩個範例的差異

協程結構:
say_hello() 範例:只有單一協程,簡單直接。適合執行單個異步任務。
main() 範例:使用主協程來管理其他協程。更具組織性,適合多任務協作或併發執行。

事件循環:
say_hello() 範例:asyncio.run() 直接運行單一協程,事件循環簡單明確。
main() 範例:asyncio.run(main()) 將事件循環集中在主協程內,適合多任務管理。

擴展性:
say_hello() 範例:適用於簡單的異步操作,不太適合複雜的協程調度。
main() 範例:具備更大的靈活性,可以在 main() 裡組織和調度多個協程,適合複雜的異步程式。


上一篇
使用 Flask 構建簡單的 Web 應用
下一篇
異步編程進階概念
系列文
Python 新手村——基礎技能養成記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言